package ru.ver40.service;

/**
 * Интерфейс, который реализуют все объекты, действующие по времени.
 * 
 */
public interface ITimedEntity {

	/**
	 * Выполнение запланированного действия. Вызывается из сервиса времени, когда подойдет
	 * срок. Для объектов AI должна установить следующее запланированное действие.
	 * @return true если после совершения действия был запланирован кулдаун (главному
	 *         тайм-объекту надо выполнить сразу следующий ход, чтобы отработать этот кулдаун),
	 *         иначе возвращается false.
	 */
	public boolean performTimedAction();

	/**
	 * Получить текущую длительность действия.
	 * Вызывается из сервиса времени.
	 */
	public int getActDuration();

	/**
	 * Уменьшает текущую длительность действия на единицу.
	 * Вызывается из сервиса времени в качестве прошедшего кванта времени.
	 */
	public void actionTick();

	/**
	 * Получить координаты временного объекта (для отсечения объектов по площади).
	 */
	public int getX();

	/**
	 * Получить координаты временного объекта (для отсечения объектов по площади).
	 */
	public int getY();

}
